約 2,353,473 件
https://w.atwiki.jp/nakamura001/pages/39.html
Mobile 3D Graphics With OpenGL ES and M3G (Morgan Kaufmann Series in Computer Graphics) 購入済み。これから読みます。 日本のAmazonでは出品者からしか購入できないのに米Amazonでは普通に売ってたりする不思議な状態です。 Opengl-Es Game Development (Game Development Series) 購入済み。これから読みます。 OpenGL ES Game Development(サポートページ) http //glbook.gamedev.net/opengles/default.asp OpenGL ES 2.0 Programming Guide OpenGL ES 2.0の本です。iPhoneはOpenGL ES 1.1を搭載しているのでiPhoneのプログラムをしよう考えている人には上記の本の方が良いでしょう。
https://w.atwiki.jp/learn_opengl/pages/2.html
メニュー トップページ リンク OpenGL本家 OpenGL4 APIリファレンス カウンタ today - yesterday - total - ここを編集
https://w.atwiki.jp/learn_opengl/pages/18.html
GLMライブラリの導入方法について説明します GLMとは? OpenGL用数学ライブラリです。 手順 GLM公式からダウンロードして展開 glm-*.*.*.*/glm/glm フォルダごと C /Program Files (x86)/Microsoft Visual Studio 11.0/VC/include にコピー
https://w.atwiki.jp/gametips/pages/17.html
更新日時 2013-06-15 23 07 25 (Sat)アクセス数 - glGenBuffers 目次 概要 エラー サンプルコード 参考文献 概要 void glGenBuffers(GLsizei n, GLuint *buffers); n 個のバッファオブジェクトを生成します。 この API で生成されたバッファオブジェクトには 1 以上の整数で表されるハンドルが割り当てられ、 n 個のハンドルが第2引数で指定された buffers に書き込まれます。 以後、生成されたバッファオブジェクトにアクセスするためにはこのハンドルを使用することになります。 n に 2 以上の整数を指定して一度に複数のバッファオブジェクトを生成した場合であっても、 そのハンドルが連続した整数になるとは限らないことに注意してください。 生成したバッファオブジェクトを対象になんらかの処理を施す場合には glBindBuffer で事前にバインドする必要があります。 また、バッファオブジェクトを削除するためには glDeleteBuffers を利用します。 エラー GL_INVALID_VALUE 第1引数 n に負の値を設定した場合に生成されます。 サンプルコード 以下に、バッファオブジェクトを生成して頂点属性を転送する C++ コードの例を示します。 ///**********************************************//** /// 頂点属性を頂点シェーダに渡します。 /// ここではシェーダのコンパイルとリンクは省略されています。 ///**********************************************//** // バッファオブジェクトへのハンドル GLuint position_buffer; GLuint color_buffer; // 頂点配列オブジェクトへのハンドル GLuint vao; // バッファオブジェクトの生成 void CreateBufferObject() { // 三角形ポリゴンの位置と色に対応する頂点属性の定義 float positions[] = { -0.5f, -0.5f, 0.0f, 0.5f, -0.5f, 0.0f, 0.5f, 0.5f, 0.0f }; float colors[] = { 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f }; // バッファオブジェクトの生成 GLuint vbo[2]; glGenBuffers(2, vbo); position_buffer = vbo[0]; color_buffer = vbo[1]; // 頂点位置をバッファオブジェクトに転送 glBindBuffer(GL_ARRAY_BUFFER, position_buffer); glBufferData(GL_ARRAY_BUFFER, sizeof(float) * 9, positions, GL_STATIC_DRAW); // 頂点色をバッファオブジェクトに転送 glBindBuffer(GL_ARRAY_BUFFER, color_buffer); glBufferData(GL_ARRAY_BUFFER, sizeof(float) * 9, colors, GL_STATIC_DRAW); } // 頂点シェーダの入力属性とバッファオブジェクトを対応付ける void BindVertexAttribute() { // 頂点シェーダの vertex_position と vertex_color に属性インデックス 0, 1 をマッピング glBindAttribLocation(program, 0, "vertex_position"); glBindAttribLocation(program, 1, "vertex_color"); // フラグメントシェーダの出力変数をマッピング glBindFragDataLocation(program, 0, "fragment_color"); // 頂点配列オブジェクトを 1 つ作成してバインド glGenVertexArrays(1, vao); glBindVertexArray(vao); // 頂点位置と頂点色のそれぞれについて頂点属性配列を有効化 glEnableVertexAttribArray(0); glEnableVertexAttribArray(1); // バッファオブジェクトに転送した頂点位置をインデックス 0 に関連付ける glBindBuffer(GL_ARRAY_BUFFER, position_buffer); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, (GLubyte*)NULL); // バッファオブジェクトに転送した頂点色をインデックス 1 に関連付ける glBindBuffer(GL_ARRAY_BUFFER, color_buffer); glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 0, (GLubyte*)NULL); } // レンダリング void display() { glClear(GL_COLOR_BUFFER_BIT); glBindVertexArray(vao); glDrawArrays(GL_TRIANGLES, 0, 3); glFlush(); } 参考文献 OpenGLに関連するオススメの本や WEB サイトを紹介します. ページ右の画像をクリックすると Amazon で参考文献を購入できます. OpenGL策定委員会, 「OpenGLプログラミングガイド 原著第5版」, ピアソンエデュケーション OpenGLの赤本(Red Book)と呼ばれる定番の参考書の日本語版です。 少し値は張りますがOpenGLの基本的な使い方が丁寧にまとめられています。 初心者の方には敷居が高いかもしれませんがOpenGLを極めるつもりなら必須の教本だと思います。 Mark Segal, Kurt Akeley, Jon Leech, 「OpenGL4.0グラフィックスシステム」, カットシステム OpenGLの仕様書の日本語訳です。個人的には翻訳に違和感を覚えることはありませんでした。 英語が苦手な方は本書をAPIリファレンスの代わりに利用できます。 チュートリアルのような内容は含まれていませんので他の書籍との併用をオススメします。 床井 浩平, 「GLUTによるOpenGL入門」, 工学社 これから OpenGL を初めようとしている方にはこの本がオススメです。 おそらく OpenGL に関する文献の中では最も敷居が低く 3DCG に関する知識が全くなくても理解しやすいです。 少し内容は古いかもしれませんが導入という目的では最高の文献で、私もこの本から OpenGL に入門しました。 床井 浩平, 「GLUTによるOpenGL入門2 テクスチャマッピング」, 工学社 上の「GLUT によるOpenGL入門」の続編です。 前作の内容では物足りなかった方は本書を読むことで 3DCG の表現力が大幅に広がります。 引き続き平易な内容となっており、前作を読破した方であれば難なく理解できると思います。 David Wolff , 「OpenGL 4.0 シェーディング言語 -実例で覚えるGLSLプログラミング-」, ボーンデジタル 最近のゲームに見られるようなリアルな映像をつくりだすにはプログラマブル・シェーダという機能が欠かせません。 床井 浩平さんの「GLUTによるOpenGL入門2 テクスチャマッピング」でもシェーダに関しては少しだけ触れられていますが、書籍の後半で軽く紹介されているだけでいささか物足りない内容ではありますので、本格的に学ぶためにこの本の購入をオススメします。 OpenGL Reference Pages - glGenBuffers 公式の API リファレンス(英語)です。 質問・コメント欄 名前 コメント すべてのコメントを見る
https://w.atwiki.jp/gametips/pages/31.html
更新日時 2013-06-15 23 54 31 (Sat)アクセス数 - glDrawArrays 目次 概要 エラー サンプルコード 参考文献 概要 void glDrawArrays(GLenum mode, GLint first, GLsizei count); 属性配列からプリミティブのレンダリングを行います。 頂点インデックスを指定したい場合には glDrawElements を使用してください。 第 1 引数 mode では以下の定数を利用してプリミティブの種類を指定します。 定数 注釈 GL_POINTS GL_LINE_STRIP GL_LINE_LOOP GL_LINE_LINES GL_LINE_STRIP_ADJACENCY OpenGL 3.2 以上で利用できます GL_LINE_ADJACENCY OpenGL 3.2 以上で利用できます GL_TRIANGLE_STRIP GL_TRIANGLE_FAN GL_TRIANGLES GL_TRIANGLE_STRIP_ADJACENCY OpenGL 3.2 以上で利用できます GL_TRIANGLES_ADJACENCY OpenGL 3.2 以上で利用できます GL_PATCHES 第 2 引数 first には配列内の開始インデックスを指定します。 第 3 引数 count には要素数を指定します。 エラー GL_INVALID_ENUM 第 1 引数 mode が許可されている値でない場合に生成されます。 GL_INVALID_VALUE 第 3 引数 count が負である場合に生成されます。 GL_INVALID_OPERATION ジオメトリシェーダが有効で現在のプログラムが入力されたプリミティブタイプに互換性が無い場合に発生します generated if a non-zero buffer object name is bound to an enabled array and the buffer object s data store is currently mapped. サンプルコード 以下に、バッファオブジェクトを生成して頂点属性を転送する C++ コードの例を示します。 ///**********************************************//** /// 頂点属性を頂点シェーダに渡します。 /// ここではシェーダのコンパイルとリンクは省略されています。 ///**********************************************//** // バッファオブジェクトへのハンドル GLuint position_buffer; GLuint color_buffer; // 頂点配列オブジェクトへのハンドル GLuint vao; // バッファオブジェクトの生成 void CreateBufferObject() { // 三角形ポリゴンの位置と色に対応する頂点属性の定義 float positions[] = { -0.5f, -0.5f, 0.0f, 0.5f, -0.5f, 0.0f, 0.5f, 0.5f, 0.0f }; float colors[] = { 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f }; // バッファオブジェクトの生成 GLuint vbo[2]; glGenBuffers(2, vbo); position_buffer = vbo[0]; color_buffer = vbo[1]; // 頂点位置をバッファオブジェクトに転送 glBindBuffer(GL_ARRAY_BUFFER, position_buffer); glBufferData(GL_ARRAY_BUFFER, sizeof(float) * 9, positions, GL_STATIC_DRAW); // 頂点色をバッファオブジェクトに転送 glBindBuffer(GL_ARRAY_BUFFER, color_buffer); glBufferData(GL_ARRAY_BUFFER, sizeof(float) * 9, colors, GL_STATIC_DRAW); } // 頂点シェーダの入力属性とバッファオブジェクトを対応付ける void BindVertexAttribute() { // 頂点シェーダの vertex_position と vertex_color に属性インデックス 0, 1 をマッピング glBindAttribLocation(program, 0, "vertex_position"); glBindAttribLocation(program, 1, "vertex_color"); // フラグメントシェーダの出力変数をマッピング glBindFragDataLocation(program, 0, "fragment_color"); // 頂点配列オブジェクトを 1 つ作成してバインド glGenVertexArrays(1, vao); glBindVertexArray(vao); // 頂点位置と頂点色のそれぞれについて頂点属性配列を有効化 glEnableVertexAttribArray(0); glEnableVertexAttribArray(1); // バッファオブジェクトに転送した頂点位置をインデックス 0 に関連付ける glBindBuffer(GL_ARRAY_BUFFER, position_buffer); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, (GLubyte*)NULL); // バッファオブジェクトに転送した頂点色をインデックス 1 に関連付ける glBindBuffer(GL_ARRAY_BUFFER, color_buffer); glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 0, (GLubyte*)NULL); } // レンダリング void display() { glClear(GL_COLOR_BUFFER_BIT); glBindVertexArray(vao); glDrawArrays(GL_TRIANGLES, 0, 3); glFlush(); } 参考文献 OpenGLに関連するオススメの本や WEB サイトを紹介します. ページ右の画像をクリックすると Amazon で参考文献を購入できます. OpenGL策定委員会, 「OpenGLプログラミングガイド 原著第5版」, ピアソンエデュケーション OpenGLの赤本(Red Book)と呼ばれる定番の参考書の日本語版です。 少し値は張りますがOpenGLの基本的な使い方が丁寧にまとめられています。 初心者の方には敷居が高いかもしれませんがOpenGLを極めるつもりなら必須の教本だと思います。 Mark Segal, Kurt Akeley, Jon Leech, 「OpenGL4.0グラフィックスシステム」, カットシステム OpenGLの仕様書の日本語訳です。個人的には翻訳に違和感を覚えることはありませんでした。 英語が苦手な方は本書をAPIリファレンスの代わりに利用できます。 チュートリアルのような内容は含まれていませんので他の書籍との併用をオススメします。 床井 浩平, 「GLUTによるOpenGL入門」, 工学社 これから OpenGL を初めようとしている方にはこの本がオススメです。 おそらく OpenGL に関する文献の中では最も敷居が低く 3DCG に関する知識が全くなくても理解しやすいです。 少し内容は古いかもしれませんが導入という目的では最高の文献で、私もこの本から OpenGL に入門しました。 床井 浩平, 「GLUTによるOpenGL入門2 テクスチャマッピング」, 工学社 上の「GLUT によるOpenGL入門」の続編です。 前作の内容では物足りなかった方は本書を読むことで 3DCG の表現力が大幅に広がります。 引き続き平易な内容となっており、前作を読破した方であれば難なく理解できると思います。 David Wolff , 「OpenGL 4.0 シェーディング言語 -実例で覚えるGLSLプログラミング-」, ボーンデジタル 最近のゲームに見られるようなリアルな映像をつくりだすにはプログラマブル・シェーダという機能が欠かせません。 床井 浩平さんの「GLUTによるOpenGL入門2 テクスチャマッピング」でもシェーダに関しては少しだけ触れられていますが、書籍の後半で軽く紹介されているだけでいささか物足りない内容ではありますので、本格的に学ぶためにこの本の購入をオススメします。 OpenGL Reference Pages - glDrawArrays 公式の API リファレンス(英語)です。 質問・コメント欄 名前 コメント すべてのコメントを見る
https://w.atwiki.jp/gametips/pages/20.html
更新日時 2013-06-15 23 06 08 (Sat)アクセス数 - glBufferData 目次 概要 注意 エラー サンプルコード 参考文献 概要 void glBufferData(GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage); glBindBuffer で target にバインドされたバッファオブジェクトにデータを転送します。 第 1 引数では以下の定数を指定してバッファオブジェクトの種類を選択します。 定数 バッファオブジェクトの種類 GL_ARRAY_BUFFER 頂点バッファ GL_ELEMENT_ARRAY_BUFFER 頂点インデックス 第 2 引数 size には転送するデータのサイズをバイト数で指定し、 第 3 引数 data には転送するデータの先頭へのポインタを指定します。 第 4 引数 usage では転送されたデータの使い方を指定します。 このパラメータは OpenGL にヒントを与えるもので、適切な指定によってパフォーマンスの向上が期待できます。 usage の指定はアクセス頻度と特性の 2 つのパートに分かれています。 定数 アクセス頻度 STREAM 値の設定は一度だけで、数回程度使用されます。 STATIC 値の設定は一度だけで、非常に多い回数使用されます。 DYNAMIC 値の設定は繰り返し実行され、非常に多い回数使用されます。 定数 特性 DRAW データはアプリケーションによって設定され、OpenGL の描画のソースとして使用します。 READ データは OpenGL 側から読みこんで設定され、アプリケーションのクエリによって取得されます。 COPY データは OpenGL 側から読みこんで設定され、OpenGL の描画のソースとして使用します。 最も頻繁に利用することになるのは STATIC と DRAW の組み合わせで、 この場合には引数 usage に GL_STATIC_DRAW を指定します。 注意 第 3 引数 data に NULL を指定した場合には指定したサイズの未初期化領域が作成されます。 つまり、その領域に格納されている内容は未定義です。 エラー GL_INVALID_ENUM 第 1 引数 target が許可されている値でない場合に生成されます。 第 4 引数 usage が許可されている値でない場合に生成されます。 GL_INVALID_VALUE 第 2 引数 size が負である場合に生成されます。 GL_INVALID_OPERATION target にバインドされているバッファオブジェクトが存在しない場合に生成されます。 GL_OUT_OF_MEMORY 転送に必要なメモリを確保できなかった場合に生成されます。 サンプルコード 以下に、バッファオブジェクトを生成して頂点属性を転送する C++ コードの例を示します。 ///**********************************************//** /// 頂点属性を頂点シェーダに渡します。 /// ここではシェーダのコンパイルとリンクは省略されています。 ///**********************************************//** // バッファオブジェクトへのハンドル GLuint position_buffer; GLuint color_buffer; // 頂点配列オブジェクトへのハンドル GLuint vao; // バッファオブジェクトの生成 void CreateBufferObject() { // 三角形ポリゴンの位置と色に対応する頂点属性の定義 float positions[] = { -0.5f, -0.5f, 0.0f, 0.5f, -0.5f, 0.0f, 0.5f, 0.5f, 0.0f }; float colors[] = { 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f }; // バッファオブジェクトの生成 GLuint vbo[2]; glGenBuffers(2, vbo); position_buffer = vbo[0]; color_buffer = vbo[1]; // 頂点位置をバッファオブジェクトに転送 glBindBuffer(GL_ARRAY_BUFFER, position_buffer); glBufferData(GL_ARRAY_BUFFER, sizeof(float) * 9, positions, GL_STATIC_DRAW); // 頂点色をバッファオブジェクトに転送 glBindBuffer(GL_ARRAY_BUFFER, color_buffer); glBufferData(GL_ARRAY_BUFFER, sizeof(float) * 9, colors, GL_STATIC_DRAW); } // 頂点シェーダの入力属性とバッファオブジェクトを対応付ける void BindVertexAttribute() { // 頂点シェーダの vertex_position と vertex_color に属性インデックス 0, 1 をマッピング glBindAttribLocation(program, 0, "vertex_position"); glBindAttribLocation(program, 1, "vertex_color"); // フラグメントシェーダの出力変数をマッピング glBindFragDataLocation(program, 0, "fragment_color"); // 頂点配列オブジェクトを 1 つ作成してバインド glGenVertexArrays(1, vao); glBindVertexArray(vao); // 頂点位置と頂点色のそれぞれについて頂点属性配列を有効化 glEnableVertexAttribArray(0); glEnableVertexAttribArray(1); // バッファオブジェクトに転送した頂点位置をインデックス 0 に関連付ける glBindBuffer(GL_ARRAY_BUFFER, position_buffer); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, (GLubyte*)NULL); // バッファオブジェクトに転送した頂点色をインデックス 1 に関連付ける glBindBuffer(GL_ARRAY_BUFFER, color_buffer); glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 0, (GLubyte*)NULL); } // レンダリング void display() { glClear(GL_COLOR_BUFFER_BIT); glBindVertexArray(vao); glDrawArrays(GL_TRIANGLES, 0, 3); glFlush(); } 参考文献 OpenGLに関連するオススメの本や WEB サイトを紹介します. ページ右の画像をクリックすると Amazon で参考文献を購入できます. OpenGL策定委員会, 「OpenGLプログラミングガイド 原著第5版」, ピアソンエデュケーション OpenGLの赤本(Red Book)と呼ばれる定番の参考書の日本語版です。 少し値は張りますがOpenGLの基本的な使い方が丁寧にまとめられています。 初心者の方には敷居が高いかもしれませんがOpenGLを極めるつもりなら必須の教本だと思います。 Mark Segal, Kurt Akeley, Jon Leech, 「OpenGL4.0グラフィックスシステム」, カットシステム OpenGLの仕様書の日本語訳です。個人的には翻訳に違和感を覚えることはありませんでした。 英語が苦手な方は本書をAPIリファレンスの代わりに利用できます。 チュートリアルのような内容は含まれていませんので他の書籍との併用をオススメします。 床井 浩平, 「GLUTによるOpenGL入門」, 工学社 これから OpenGL を初めようとしている方にはこの本がオススメです。 おそらく OpenGL に関する文献の中では最も敷居が低く 3DCG に関する知識が全くなくても理解しやすいです。 少し内容は古いかもしれませんが導入という目的では最高の文献で、私もこの本から OpenGL に入門しました。 床井 浩平, 「GLUTによるOpenGL入門2 テクスチャマッピング」, 工学社 上の「GLUT によるOpenGL入門」の続編です。 前作の内容では物足りなかった方は本書を読むことで 3DCG の表現力が大幅に広がります。 引き続き平易な内容となっており、前作を読破した方であれば難なく理解できると思います。 David Wolff , 「OpenGL 4.0 シェーディング言語 -実例で覚えるGLSLプログラミング-」, ボーンデジタル 最近のゲームに見られるようなリアルな映像をつくりだすにはプログラマブル・シェーダという機能が欠かせません。 床井 浩平さんの「GLUTによるOpenGL入門2 テクスチャマッピング」でもシェーダに関しては少しだけ触れられていますが、書籍の後半で軽く紹介されているだけでいささか物足りない内容ではありますので、本格的に学ぶためにこの本の購入をオススメします。 OpenGL Reference Pages - glBufferData 公式の API リファレンス(英語)です。 質問・コメント欄 名前 コメント すべてのコメントを見る
https://w.atwiki.jp/illuststudio/pages/93.html
OpenGL関連で発見されている不具合情報・報告 なお、以下の不具合と同じ環境であっても発生しない場合もある。 環境によるのであくまでも参考ということで。 回転させたキャンバスで平行定規を作り直線ツールを使うとイラスタが強制終了する イラスタver:1.0.9RC1 OS:WinXP Home SP3(?bit)SPEC:Core2 1.8GHz、3GB RAM GPU:NVIDIA GeForce 9600 GT、512MBver:6.14.0011.9062(ENG) サポートへの報告不具合報告 topic_id=1113 サポートからの回答再現確認済み、今後の修正を検討 複数レイヤーを同時変形でイラスタが強制終了する イラスタver:1.0.9RC1 OS:WinXP Home SP3(?bit)SPEC:Core2 1.8GHz、3GB RAM GPU:NVIDIA GeForce 9600 GT、512MBver:6.14.0011.9062(ENG) サポートへの報告不具合報告 topic_id=1131 サポートからの回答未 wiki編集できない方は以下コメントで。 名前 コメント 以下はテンプレ 不具合を簡単に(長くなるなら下線までの間に記載で) イラスタver: OS:Windows (**bit)SPEC:xxxx *.**GHz、*.**GB RAM GPU:グラカ名、***MBver:ドライババージョン サポートへの報告報告しているのであればそのトピック番号 サポートからの回答回答を簡単に記載 特筆すべきことがあればここに 上の下線までがテンプレ
https://w.atwiki.jp/gametips/pages/37.html
更新日時 2013-06-15 23 53 54 (Sat)アクセス数 - glDrawElements 目次 概要 エラー サンプルコード 参考文献 概要 void glDrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices); 属性配列からプリミティブのレンダリングを行います。 glDrawArrays によく似ていますが、この API では頂点インデックスを指定することができる点が異なります。 第 1 引数 mode では以下の定数を利用してプリミティブの種類を指定します。 定数 注釈 GL_POINTS GL_LINE_STRIP GL_LINE_LOOP GL_LINE_LINES GL_LINE_STRIP_ADJACENCY OpenGL 3.2 以上で利用できます GL_LINE_ADJACENCY OpenGL 3.2 以上で利用できます GL_TRIANGLE_STRIP GL_TRIANGLE_FAN GL_TRIANGLES GL_TRIANGLE_STRIP_ADJACENCY OpenGL 3.2 以上で利用できます GL_TRIANGLES_ADJACENCY OpenGL 3.2 以上で利用できます GL_PATCHES 第 2 引数 count には要素数を指定します。 第 3 引数 type では第 4 引数 indices の型を指定します。 GL_UNSIGNED_BYTE, GL_UNSIGNED_SHORT, GL_UNSIGNED_INT のいずれかを指定しなければなりません。 第 4 引数 indices では頂点インデックスを格納した配列を指定します。 エラー GL_INVALID_ENUM 第 1 引数 mode が許可されている値でない場合に生成されます。 GL_INVALID_VALUE 第 2 引数 count が負である場合に生成されます。 GL_INVALID_OPERATION ジオメトリシェーダが有効で現在のプログラムが入力されたプリミティブタイプに互換性が無い場合に発生します generated if a non-zero buffer object name is bound to an enabled array and the buffer object s data store is currently mapped. サンプルコード 以下に、頂点インデックスを指定してレンダリングするコードの例を示します。 より実用的には、8 頂点だけから立方体をレンダリングする例が考えられます。 ///**********************************************//** /// 頂点インデックスを指定して四角形をレンダリングします。 /// ここではシェーダのコンパイルとリンクは省略されています。 ///**********************************************//** // バッファオブジェクトへのハンドル GLuint position_buffer; GLuint color_buffer; // 頂点配列オブジェクトへのハンドル GLuint vao; // 四角形ポリゴンの位置・色・頂点インデックスの定義 float positions[] = { -0.5f, -0.5f, -0.5f, +0.5f, -0.5f, -0.5f, +0.5f, +0.5f, -0.5f, -0.5f, +0.5f, -0.5f }; float colors[] = { 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, }; unsigned int indices[] = { 1,2,0,3 }; // バッファオブジェクトの生成 void CreateBufferObject() { // バッファオブジェクトの生成 GLuint vbo[2]; glGenBuffers(2, vbo); position_buffer = vbo[0]; color_buffer = vbo[1]; // 頂点位置をバッファオブジェクトに転送 glBindBuffer(GL_ARRAY_BUFFER, position_buffer); glBufferData(GL_ARRAY_BUFFER, sizeof(float) * 24, positions, GL_STATIC_DRAW); // 頂点色をバッファオブジェクトに転送 glBindBuffer(GL_ARRAY_BUFFER, color_buffer); glBufferData(GL_ARRAY_BUFFER, sizeof(float) * 24, colors, GL_STATIC_DRAW); } // 頂点シェーダの入力属性とバッファオブジェクトを対応付ける void BindVertexAttribute() { // 頂点シェーダの vertex_position と vertex_color に属性インデックス 0, 1 をマッピング glBindAttribLocation(program, 0, "vertex_position"); glBindAttribLocation(program, 1, "vertex_color"); // フラグメントシェーダの出力変数をマッピング glBindFragDataLocation(program, 0, "fragment_color"); // 頂点配列オブジェクトを 1 つ作成してバインド glGenVertexArrays(1, vao); glBindVertexArray(vao); // 頂点位置と頂点色のそれぞれについて頂点属性配列を有効化 glEnableVertexAttribArray(0); glEnableVertexAttribArray(1); // バッファオブジェクトに転送した頂点位置をインデックス 0 に関連付ける glBindBuffer(GL_ARRAY_BUFFER, position_buffer); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, (GLubyte*)NULL); // バッファオブジェクトに転送した頂点色をインデックス 1 に関連付ける glBindBuffer(GL_ARRAY_BUFFER, color_buffer); glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 0, (GLubyte*)NULL); } // レンダリング void display() { glClear(GL_COLOR_BUFFER_BIT); glBindVertexArray(vao); glDrawElements(GL_TRIANGLE_STRIP, sizeof(indices)/sizeof(indices[0]), GL_UNSIGNED_INT, indices); glFlush(); } 参考文献 OpenGLに関連するオススメの本や WEB サイトを紹介します. ページ右の画像をクリックすると Amazon で参考文献を購入できます. OpenGL策定委員会, 「OpenGLプログラミングガイド 原著第5版」, ピアソンエデュケーション OpenGLの赤本(Red Book)と呼ばれる定番の参考書の日本語版です。 少し値は張りますがOpenGLの基本的な使い方が丁寧にまとめられています。 初心者の方には敷居が高いかもしれませんがOpenGLを極めるつもりなら必須の教本だと思います。 Mark Segal, Kurt Akeley, Jon Leech, 「OpenGL4.0グラフィックスシステム」, カットシステム OpenGLの仕様書の日本語訳です。個人的には翻訳に違和感を覚えることはありませんでした。 英語が苦手な方は本書をAPIリファレンスの代わりに利用できます。 チュートリアルのような内容は含まれていませんので他の書籍との併用をオススメします。 床井 浩平, 「GLUTによるOpenGL入門」, 工学社 これから OpenGL を初めようとしている方にはこの本がオススメです。 おそらく OpenGL に関する文献の中では最も敷居が低く 3DCG に関する知識が全くなくても理解しやすいです。 少し内容は古いかもしれませんが導入という目的では最高の文献で、私もこの本から OpenGL に入門しました。 床井 浩平, 「GLUTによるOpenGL入門2 テクスチャマッピング」, 工学社 上の「GLUT によるOpenGL入門」の続編です。 前作の内容では物足りなかった方は本書を読むことで 3DCG の表現力が大幅に広がります。 引き続き平易な内容となっており、前作を読破した方であれば難なく理解できると思います。 David Wolff , 「OpenGL 4.0 シェーディング言語 -実例で覚えるGLSLプログラミング-」, ボーンデジタル 最近のゲームに見られるようなリアルな映像をつくりだすにはプログラマブル・シェーダという機能が欠かせません。 床井 浩平さんの「GLUTによるOpenGL入門2 テクスチャマッピング」でもシェーダに関しては少しだけ触れられていますが、書籍の後半で軽く紹介されているだけでいささか物足りない内容ではありますので、本格的に学ぶためにこの本の購入をオススメします。 OpenGL Reference Pages - glDrawElements 公式の API リファレンス(英語)です。 質問・コメント欄 名前 コメント すべてのコメントを見る
https://w.atwiki.jp/musaka/pages/19.html
GLUTによる文字描画 glut.h ・glutStrokeCharacter 関数の定義-参考HP1より void drawStrokeString(GLfloat x, GLfloat y, float xscl, float yscl,void *font, char *string) { glPushMatrix(); glTranslatef(x, y, 0); glScalef(xscl, yscl, 1.0f); while (*string) glutStrokeCharacter(font, *string++); glPopMatrix(); } 使用例 case WM_PAINT glClearColor((GLclampf)0.7, (GLclampf)0.8, (GLclampf)0.8, 0.0); glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); //視点の変換行列の初期化 glLoadIdentity(); CalcCameraPosition(camera_theta,camera_phi,camera_distance,camera_centerX,camera_centerY,camera_centerZ, camera_positionX, camera_positionY, camera_positionZ, camera_upY); //視点の決定 gluLookAt(camera_positionX, camera_positionY, camera_positionZ,0.0,0.0,0.0,0.0,camera_upY,0.0);// camera_centerX,camera_centerY,camera_centerZ, 0.0,1.0,0.0); glPushMatrix(); glTranslated(5.0,0.0,0.0); drawStrokeString(1.0f,1.0f,0.02f,0.02f,GLUT_STROKE_ROMAN,"5"); glPopMatrix(); glFlush(); mygraph.Draw(hMemDC,0,0,MEM_WIDTH,MEM_HEIGHT); hdc = BeginPaint(hWnd, ps); // TODO 描画コードをここに追加してください... BitBlt(hdc,0,0,WINDOW_WIDTH,WINDOW_HEIGHT,hMemDC,0,0,SRCCOPY);//ここでhMemDCに書き込んだ内容を一気hdcに転送する EndPaint(hWnd, ps); break; FTGLによる文字描画 ・FTGLPolygonFont #include FTGLPolygonFont.h #define FONT "C \\WINDOWS\\Fonts\\meiryo.ttc"//sazanami-mincho.ttf"//sazanami-gothic.ttf #define SIZE 5.0 #define DEPTH 1.5 FTFont *font; 使用例 case WM_CREATE font = new FTGLPolygonFont(FONT); if (font- Error()) exit(1); // can t open font file if (!font- FaceSize(SIZE)) exit(1); // can t set font size if (!font- CharMap(ft_encoding_unicode)) exit(1); // can t set charmap break; case WM_PAINT glClearColor((GLclampf)0.7, (GLclampf)0.8, (GLclampf)0.8, 0.0); glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); //視点の変換行列の初期化 glLoadIdentity(); CalcCameraPosition(camera_theta,camera_phi,camera_distance,camera_centerX,camera_centerY,camera_centerZ, camera_positionX, camera_positionY, camera_positionZ, camera_upY); //視点の決定 gluLookAt(camera_positionX, camera_positionY, camera_positionZ,0.0,0.0,0.0,0.0,camera_upY,0.0);// camera_centerX,camera_centerY,camera_centerZ, 0.0,1.0,0.0); glPushMatrix(); glColor3d(0.0, 0.0, 0.0); glTranslated(0.0, 5.0, 0.0); font- Render(TEXT("こんにちわ")); glPopMatrix(); glFlush(); mygraph.Draw(hMemDC,0,0,MEM_WIDTH,MEM_HEIGHT); hdc = BeginPaint(hWnd, ps); // TODO 描画コードをここに追加してください... BitBlt(hdc,0,0,WINDOW_WIDTH,WINDOW_HEIGHT,hMemDC,0,0,SRCCOPY);//ここでhMemDCに書き込んだ内容を一気hdcに転送する EndPaint(hWnd, ps); break; 参考HP 1.http //www.exa-corp.co.jp/solution/UBIQ/OpenGL/OpenGL-text-091.pdf 2.http //www.kushiro-ct.ac.jp/yanagawa/project/ftgl/FTGLPolygonFontの使用方法 3.http //pages.cpsc.ucalgary.ca/~pneumann/wiki/pmwiki.php?n=MyUniversity.NotePad ビルド済みFreeType2とFTGLのインクルードヘッダとDLLとlibがダウンロードできるが,私の環境では動かなかった。 4.http //nanabit.net/programming/python-prog/一部ビルド方法 5.http //www.xmission.com/~nate/glut.html glutのダウンロード 6.http //shade-lounge.e-frontier.co.jp/modules/newbb/viewtopic.php?topic_id=799 forum=2 Microsoft VisualStudio2005 Professional Editionにてのビルド方法 1.sourceforgeからFTGLとfreetypeとcppunitをダウンロードし、それらを展開してProgram Filesにおく ダウンロードしたファイル名 ftgl-2.1.2.tar.gz ft235.zip cppunit-1.12.0.tar.gz 2.ツール-オプション-プロジェクトおよびソリューション-VC++ディレクトリ にて FreeTypeとFTGLおよびcppunitの インクルードディレクトリ および ライブラリディレクトリ を指定する ディレクトリを表示するプロジェクト:インクルードファイルの項目を以下のように設定する C \Program Files\cppunit-1.12.0\include C \Program Files\FTGL\include C \Program Files\freetype-2.3.5\include ディレクトリを表示するプロジェクト:ライブラリファイルの項目を以下のように設定する C \Program Files\cppunit-1.12.0\lib C \Program Files\FTGL\win32_vcpp\build C \Program Files\freetype-2.3.5\objs 3.C \Program Files\FTGL\win32_vcpp\のなかのftgl.dswを開く 4.freetype204MT_D.libの数字などを実際のものに書き換えてあげる。 ここでは,ftgl_static_libプロジェクト以外の以下のプロジェクトの プロパティ-構成プロパティ-リンカ-入力-追加の依存ファイルの の項目を以下のように修正する Debug ftgl_demo freetype235MT_D.lib ftgl_static_MT_d.lib ftgl_demo2 freetype235MT_D.lib ftgl_static_MT_d.lib ftgl_dll freetype235MT_D.lib unit_tests freetype235MT_D.lib ftgl_static_MT_d.lib cppunitd_dll.lib Debug DLL ftgl_demo freetype235_D.lib ftgl_dynamic_MT_d.lib ftgl_demo2 freetype235_D.lib ftgl_dynamic_MT_d.lib ftgl_dll freetype235_D.lib unit_tests freetype235MT_D.lib ftgl_static_MT_d.lib cppunitd_dll.lib Debug MT ftgl_demo freetype235_D.lib ftgl_dynamic_MT_d.lib ftgl_demo2 freetype235_D.lib ftgl_dynamic_MT_d.lib ftgl_dll freetype235_D.lib unit_tests freetype235MT_D.lib ftgl_static_MT_d.lib cppunitd_dll.lib 5.参考HP6のようにプロジェクトプロパティ-リンカ-入力-特定のライブラリを無視 MSVCRTD.lib を追加 6.cppunit-1.12.0\examples\cppunittest\CppUnitTestMain.dsw をビルド 7.C \Program Files\freetype-2.3.5\builds\win32\visualc\freetype.sln をビルド glutの設定 1.参考HP5にてglut-3.7.6-bin.zipをダウンロードして展開すると以下のファイルが含まれている glut.h glut32.dll glut32.lib 2.C \Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\Include\glのなかに glut.hをいれる 3.C \WINDOWS\system32 内にglut32.dllがなければ入れておく 4.C \Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\Lib 内にglut32.libを同様に入れておく FTGL使用のためのVisualStudioの設定 1.プロジェクト-プロパティ-リンカ-入力-追加の依存ファイル に freetype235MT_D.lib ftgl_dynamic_MT_d.libを追加 2.C \WINDOWS\system32 内に以下のDLLを追加 ftgl_dynamic_MT_d.dll ftgl_dynamic_MTD.dll ftgl_dynamic_MTD_d.dll
https://w.atwiki.jp/gametips/pages/18.html
更新日時 2013-06-15 23 05 49 (Sat)アクセス数 - glBindBuffer 目次 概要 エラー サンプルコード 参考文献 概要 void glBindBuffer(GLenum target, GLuint buffer); ハンドル buffer に関連付けられたバッファオブジェクトを target にバインドして利用できる状態にします。 あるバッファオブジェクトをバインドすると以前にバインドしていたバッファオブジェクトのバインドは自動的に解除されます。 第 1 引数では以下の定数を指定してバッファオブジェクトの種類を選択します。 定数 バッファオブジェクトの種類 GL_ARRAY_BUFFER 頂点バッファ GL_ELEMENT_ARRAY_BUFFER 頂点インデックス 第 2 引数 buffer には glGenBuffers で生成したバッファオブジェクトのハンドルを指定します。 ただし、0 を指定した場合には現在バインドされているバッファオブジェクトのバインドの解除だけを実行します。 エラー GL_INVALID_ENUM 第 1 引数 target が許可されている値でない場合に生成されます。 GL_INVALID_VALUE 第 2 引数 buffer が glGenBuffers で生成されたハンドルでないときに生成されます。 サンプルコード 以下に、バッファオブジェクトを生成して頂点属性を転送する C++ コードの例を示します。 ///**********************************************//** /// 頂点属性を頂点シェーダに渡します。 /// ここではシェーダのコンパイルとリンクは省略されています。 ///**********************************************//** // バッファオブジェクトへのハンドル GLuint position_buffer; GLuint color_buffer; // 頂点配列オブジェクトへのハンドル GLuint vao; // バッファオブジェクトの生成 void CreateBufferObject() { // 三角形ポリゴンの位置と色に対応する頂点属性の定義 float positions[] = { -0.5f, -0.5f, 0.0f, 0.5f, -0.5f, 0.0f, 0.5f, 0.5f, 0.0f }; float colors[] = { 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f }; // バッファオブジェクトの生成 GLuint vbo[2]; glGenBuffers(2, vbo); position_buffer = vbo[0]; color_buffer = vbo[1]; // 頂点位置をバッファオブジェクトに転送 glBindBuffer(GL_ARRAY_BUFFER, position_buffer); glBufferData(GL_ARRAY_BUFFER, sizeof(float) * 9, positions, GL_STATIC_DRAW); // 頂点色をバッファオブジェクトに転送 glBindBuffer(GL_ARRAY_BUFFER, color_buffer); glBufferData(GL_ARRAY_BUFFER, sizeof(float) * 9, colors, GL_STATIC_DRAW); } // 頂点シェーダの入力属性とバッファオブジェクトを対応付ける void BindVertexAttribute() { // 頂点シェーダの vertex_position と vertex_color に属性インデックス 0, 1 をマッピング glBindAttribLocation(program, 0, "vertex_position"); glBindAttribLocation(program, 1, "vertex_color"); // フラグメントシェーダの出力変数をマッピング glBindFragDataLocation(program, 0, "fragment_color"); // 頂点配列オブジェクトを 1 つ作成してバインド glGenVertexArrays(1, vao); glBindVertexArray(vao); // 頂点位置と頂点色のそれぞれについて頂点属性配列を有効化 glEnableVertexAttribArray(0); glEnableVertexAttribArray(1); // バッファオブジェクトに転送した頂点位置をインデックス 0 に関連付ける glBindBuffer(GL_ARRAY_BUFFER, position_buffer); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, (GLubyte*)NULL); // バッファオブジェクトに転送した頂点色をインデックス 1 に関連付ける glBindBuffer(GL_ARRAY_BUFFER, color_buffer); glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 0, (GLubyte*)NULL); } // レンダリング void display() { glClear(GL_COLOR_BUFFER_BIT); glBindVertexArray(vao); glDrawArrays(GL_TRIANGLES, 0, 3); glFlush(); } 参考文献 OpenGLに関連するオススメの本や WEB サイトを紹介します. ページ右の画像をクリックすると Amazon で参考文献を購入できます. OpenGL策定委員会, 「OpenGLプログラミングガイド 原著第5版」, ピアソンエデュケーション OpenGLの赤本(Red Book)と呼ばれる定番の参考書の日本語版です。 少し値は張りますがOpenGLの基本的な使い方が丁寧にまとめられています。 初心者の方には敷居が高いかもしれませんがOpenGLを極めるつもりなら必須の教本だと思います。 Mark Segal, Kurt Akeley, Jon Leech, 「OpenGL4.0グラフィックスシステム」, カットシステム OpenGLの仕様書の日本語訳です。個人的には翻訳に違和感を覚えることはありませんでした。 英語が苦手な方は本書をAPIリファレンスの代わりに利用できます。 チュートリアルのような内容は含まれていませんので他の書籍との併用をオススメします。 床井 浩平, 「GLUTによるOpenGL入門」, 工学社 これから OpenGL を初めようとしている方にはこの本がオススメです。 おそらく OpenGL に関する文献の中では最も敷居が低く 3DCG に関する知識が全くなくても理解しやすいです。 少し内容は古いかもしれませんが導入という目的では最高の文献で、私もこの本から OpenGL に入門しました。 床井 浩平, 「GLUTによるOpenGL入門2 テクスチャマッピング」, 工学社 上の「GLUT によるOpenGL入門」の続編です。 前作の内容では物足りなかった方は本書を読むことで 3DCG の表現力が大幅に広がります。 引き続き平易な内容となっており、前作を読破した方であれば難なく理解できると思います。 David Wolff , 「OpenGL 4.0 シェーディング言語 -実例で覚えるGLSLプログラミング-」, ボーンデジタル 最近のゲームに見られるようなリアルな映像をつくりだすにはプログラマブル・シェーダという機能が欠かせません。 床井 浩平さんの「GLUTによるOpenGL入門2 テクスチャマッピング」でもシェーダに関しては少しだけ触れられていますが、書籍の後半で軽く紹介されているだけでいささか物足りない内容ではありますので、本格的に学ぶためにこの本の購入をオススメします。 OpenGL Reference Pages - glBindBuffer 公式の API リファレンス(英語)です。 質問・コメント欄 名前 コメント すべてのコメントを見る